home *** CD-ROM | disk | FTP | other *** search
/ PC-Blue - MS DOS Public Domain Library / PC-Blue MS-DOS Public Domain Library - NYACC.iso / vol047 / pccode2.bas < prev    next >
Encoding:
BASIC Source File  |  1987-01-11  |  12.0 KB  |  486 lines

  1. 1000 '
  2. 1010 '
  3. 1020 '         <<<<<  P C - C O D E 2  >>>>>
  4. 1030 '
  5. 1040 '
  6. 1050 '     * * * * * * * * * * * * * * * * * * * *
  7. 1060 '     *                                     *
  8. 1070 '     *  COPYRIGHT in Public Domain 1983    *
  9. 1080 '     *           by Richard N. Colvard     *
  10. 1090 '     *                                     *
  11. 1100 '     *  WARNING: This Program must be      *
  12. 1110 '     *           Compiled with IBM         *
  13. 1120 '     *           BASCOM/T/O                *
  14. 1130 '     *           Donot use BASICA          *
  15. 1140 '     *                                     *
  16. 1150 '     *  Highly recommend 8087 link libs    *
  17. 1160 '     *                                     *
  18. 1170 '     * * * * * * * * * * * * * * * * * * * *
  19. 1180 '
  20. 1190 '
  21. 1200 DIM B#(11), C#(47), CONS!(7), IX%(255)
  22. 1210 CONS!(1)=8: CONS!(2)=131072! : CONS!(3)=8192: CONS!(4)=128
  23. 1220 CONS!(5)=2: CONS!(6)=32 : CONS!(7)=2048
  24. 1230 M%=7: N%=13: YY! = 999991! : MU# = 16807 : MD# = 2147483647#
  25. 1240 W1$="12345678901234567890123456789012345678901234567890123456789012345678"
  26. 1250 W2$="         1         2         3         4         5         6"
  27. 1260 W3$=".........+.........+.........+.........+.........+.........+........"
  28. 1270 WH$="V1.37 PC-CODE2"
  29. 1280 WZ$="P C   C o m p u t e r   S e c u r i t y    " + WH$
  30. 1290 HDR$=WH$ + " ENCODED " + DATE$ + " " + TIME$
  31. 1300 SCREEN 0,1
  32. 1310 COLOR 15,9,1
  33. 1320 CLS
  34. 1330 FOR J%=10 TO 15
  35. 1340 COLOR J%,9,1
  36. 1350 PRINT "P C - C O D E 2 ......Textual SuperEncipherment......"
  37. 1360 NEXT J%
  38. 1370 COLOR 15,9,1
  39. 1380 PRINT "  "
  40. 1390 PRINT "  "
  41. 1400 PRINT " ": PRINT " "
  42. 1410 PRINT " ": PRINT " "
  43. 1420 PRINT " Enter the type of KEY desired"
  44. 1430 PRINT "    Numeric; Number Only key ";
  45. 1440 COLOR 13,0,0: PRINT "N" : COLOR 15,9,1
  46. 1450 PRINT "    Alphabetic; alphanumeric ";
  47. 1460 COLOR 13,0,0: PRINT "A" : COLOR 15,9,1
  48. 1470 INPUT " Enter N or A ", T$
  49. 1480 T$=LEFT$(T$,1)
  50. 1490 IF T$="a" THEN T$="A"
  51. 1500 IF T$="n" THEN T$="N"
  52. 1510 IF T$ <> "A" AND T$ <> "N" THEN 1470
  53. 1520 IF T$="N" THEN 1570
  54. 1530 IF T$="A" THEN 3510
  55. 1540 '
  56. 1550 '
  57. 1560 '
  58. 1570 CLS
  59. 1580 PRINT WZ$
  60. 1590 PRINT " "
  61. 1600 PRINT " "
  62. 1610 PRINT " There are two(2) levels of Security HIGH and LOW"
  63. 1620 INPUT " Enter H for HIGH or L for LOW ", A$
  64. 1630 A$=LEFT$(A$,1)
  65. 1640 IF A$ <> "H" AND A$ <> "h" AND A$ <> "L" AND A$ <> "l" THEN 1600
  66. 1650 IF A$ = "H" OR A$ = "h" THEN 1780
  67. 1660 '
  68. 1670 '   ----------- LOW level of SECURITY -------------
  69. 1680 '
  70. 1690 PRINT " LOW Level of Security Selected"
  71. 1700 PRINT " "
  72. 1710 PRINT " You must now enter SEVEN (7) KEY numbers as indicated:"
  73. 1720 PRINT " "
  74. 1730 GOSUB 3720
  75. 1740 GOTO 2320
  76. 1750 '
  77. 1760 '
  78. 1770 '
  79. 1780 PRINT " "
  80. 1790 PRINT " You have Selected HIGH security"
  81. 1800 PRINT " "
  82. 1810 PRINT " You must enter ";1+N%+M%;" key numbers between 1 and 2,147,483,646"
  83. 1820 INPUT " A(1) ? ", A#
  84. 1830 IF A# < 1 OR A# >= MD# THEN GOSUB 2170: GOTO 1820
  85. 1840 PRINT " "
  86. 1850 '
  87. 1860 '
  88. 1870 FOR J%=1 TO M%
  89. 1880 PRINT " B(";J%;") ";
  90. 1890 INPUT B#(J%)
  91. 1900 IF B#(J%) < 1 OR B#(J%) >= MD# THEN GOSUB 2170: GOTO 1880
  92. 1910 NEXT J%
  93. 1920 CLS
  94. 1930 '
  95. 1940 '
  96. 1950 FOR J%=1 TO N%
  97. 1960 PRINT " C(";J%;") ";
  98. 1970 INPUT C#(J%)
  99. 1980 IF C#(J%) < 1 OR C#(J%) >= MD# THEN GOSUB 2170: GOTO 1960
  100. 1990 IF J% = 18 THEN CLS
  101. 2000 IF J% = 36 THEN CLS
  102. 2010 NEXT J%
  103. 2020 '
  104. 2030 GOTO 2320
  105. 2040 '
  106. 2050 '
  107. 2060 '
  108. 2070 PRINT "[";X%;"] ";
  109. 2080 INPUT "Enter a NUMBER between 1 and 9,999,999 ", K2!
  110. 2090 IF K2! < 1 OR K2! > 9999999! THEN GOSUB 2170: GOTO 2070
  111. 2100 Z!=K2!
  112. 2110 GOSUB 2260
  113. 2120 S!=Z!
  114. 2130 RETURN
  115. 2140 '
  116. 2150 '
  117. 2160 '   ---------- ERROR Messages ----------
  118. 2170 BEEP
  119. 2180 COLOR 4+16,0,0
  120. 2190 PRINT " ERROR: Number RANGE must be 1 to 9,999,999"
  121. 2200 COLOR 15,1,9
  122. 2210 BEEP
  123. 2220 RETURN
  124. 2230 '
  125. 2240 '
  126. 2250 '   ------ scaling ---------
  127. 2260 Z! = Z! / 100!
  128. 2270 IF Z! > 1! THEN 2260
  129. 2280 RETURN
  130. 2290 '
  131. 2300 '
  132. 2310 '
  133. 2320 CLS
  134. 2330 PRINT WZ$
  135. 2340 PRINT " ": PRINT " ": PRINT " "
  136. 2350 PRINT "Possible Output files:"
  137. 2360 PRINT "  'A:FILE.EXT'  'B:FILE.EXT'  'LPT1:'  'CON:'  'CAS1:'"
  138. 2370 PRINT " "
  139. 2380 INPUT "Enter Output file name (Full name): ", U$
  140. 2390 IF U$ = "con:" THEN U$="CON:"
  141. 2400 IF U$ <> "CON:" THEN OPEN "O",2,U$
  142. 2410 PRINT " ": PRINT " "
  143. 2420 PRINT "Possible Input files:"
  144. 2430 PRINT "  'A:FILE.EXT'  'B:FILE.EXT'  'C:FILE.EXT'  'CON:'  'CAS1:'"
  145. 2440 PRINT " "
  146. 2450 INPUT "Enter Input FILE (full name): ", F1$
  147. 2460 IF F1$= "con:" THEN F1$="CON:"
  148. 2470 IF F1$ <> "CON:" THEN OPEN "I",1,F1$
  149. 2480 PRINT " "
  150. 2490 PRINT " "
  151. 2500 INPUT "Encode or Decode (E or D) ",EN$
  152. 2510 EN$=LEFT$(EN$,1)
  153. 2520 IF EN$ = "e" THEN EN$="E"
  154. 2530 IF EN$ = "d" THEN EN$="D"
  155. 2540 IF EN$ <> "D" AND EN$ <> "E" THEN 2500
  156. 2550 IF EN$="E" AND U$ <> "CON:" THEN PRINT #2, HDR$
  157. 2560 IF EN$ <> "D" THEN 2630
  158. 2570 IF F1$="CON:" THEN 2630
  159. 2580 LINE INPUT #1, HDR$
  160. 2590 IF LEFT$(HDR$,14) = WH$ THEN 2630
  161. 2600 PRINT "* * * File was never Encoded by "; WH$
  162. 2610 PRINT "      file header = ", HDR$
  163. 2620 END
  164. 2630 CLS: PRINT WZ$: PRINT " ": PRINT " "
  165. 2640 COLOR 4+16,0,0
  166. 2650 PRINT " * * * R U N N I N G * * *"
  167. 2660 COLOR 15,9,1
  168. 2670 PRINT " "
  169. 2680 IF F1$="CON:" THEN PRINT "--> Terminate Console Input with use '//END'"
  170. 2690 IF EN$="D" AND F1$ <> "CON:" THEN PRINT "File Header: "; HDR$
  171. 2700 PRINT " "
  172. 2710 IF F1$ = "CON:" THEN 2750
  173. 2720 IF EOF(1) <> 0 THEN 3280
  174. 2730 LINE INPUT #1, M$
  175. 2740 GOTO 2770
  176. 2750 LINE INPUT M$
  177. 2760 IF M$ = "//END" OR M$ = "//end" THEN 3280
  178. 2770 L%=LEN(M$)
  179. 2780 IF L% = 0 THEN 3080
  180. 2790 FOR JJ%=1 TO L%
  181. 2800 IX%(JJ%)=JJ%
  182. 2810 NEXT JJ%
  183. 2820 L9%=INT(L%/2)
  184. 2830 GOSUB 5460
  185. 2840 IF EN$="D" THEN GOSUB 5670
  186. 2850 FOR J%=1 TO L%
  187. 2860 H%=ASC( MID$(M$,J%,1))
  188. 2870 H% = H% - 32
  189. 2880 S#=A#
  190. 2890 L=M%
  191. 2900 GOSUB 3140
  192. 2910 A#=S#
  193. 2920 B%=O%
  194. 2930 L=N%
  195. 2940 S#=B#(B%)
  196. 2950 GOSUB 3140
  197. 2960 B#(B%)=S#
  198. 2970 B%=O%
  199. 2980 S#=C#(B%)
  200. 2990 L=95 : L2 = 2 * L
  201. 3000 GOSUB 3140
  202. 3010 C#(B%)=S#
  203. 3020 IF EN$="E" THEN H% = H% + O%
  204. 3030 IF EN$="D" THEN H% = L2 + (H% - O%)
  205. 3040 H%= H% - (L * INT(H%/L))
  206. 3050 MID$(M$,J%,1)=CHR$(H% + 32)
  207. 3060 NEXT J%
  208. 3070 IF EN$="E" THEN GOSUB 5670
  209. 3080 IF U$ <> "CON:" THEN PRINT #2, M$
  210. 3090 IF U$ = "CON:" THEN PRINT M$ : PRINT " "
  211. 3100 GOTO 2710
  212. 3110 '
  213. 3120 '
  214. 3130 '   -------- RANDOM NUMBER GENERATOR (1) ------
  215. 3140 S#=S# * MU#
  216. 3150 S#=S# - (MD# * INT(S# / MD#) )
  217. 3160 O%=1 + FIX(L * (S# / MD#) )
  218. 3170 RETURN
  219. 3180 '
  220. 3190 '
  221. 3200 '   -------- RANDOM NUMBER GENERATOR (2) ------
  222. 3210 S!=(S! + 1.352968) ^ 1.256973
  223. 3220 S!=S! - FIX(S!)
  224. 3230 O%=1 + FIX(L * S!)
  225. 3240 RETURN
  226. 3250 '
  227. 3260 '
  228. 3270 '
  229. 3280 PRINT " "
  230. 3290 IF U$ <> "CON:" THEN CLOSE 2
  231. 3300 IF F1$ <> "CON:" THEN CLOSE 1
  232. 3310 IF U$="CON:" THEN INPUT " ---Pause--- Press Enter when finished", M$
  233. 3320 '
  234. 3330 '
  235. 3340 ' ------- CLEAR MEMORY & STOP --------
  236. 3350 Z!=0: A#=0: M$=SPACE$(128): S! = 0 : S# = 0
  237. 3360 FOR J%=1 TO M%
  238. 3370 B#(J%)=0
  239. 3380 NEXT J%
  240. 3390 FOR J%=1 TO N%
  241. 3400 C#(J%)=0
  242. 3410 NEXT J%
  243. 3420 FOR J%=1 TO 128
  244. 3430 IX%(J%)=0
  245. 3440 NEXT J%
  246. 3450 COLOR 15,0,0
  247. 3460 CLS
  248. 3470 END
  249. 3480 '
  250. 3490 '   ----------- ALPHANUMERIC KEYS -----------
  251. 3500 '
  252. 3510 CLS
  253. 3520 PRINT WZ$
  254. 3530 PRINT " "
  255. 3540 PRINT " "
  256. 3550 PRINT " There are two(2) levels of Security HIGH and LOW"
  257. 3560 INPUT " Enter H for HIGH or L for LOW ", A$
  258. 3570 A$=LEFT$(A$,1)
  259. 3580 IF A$ <> "H" AND A$ <> "h" AND A$ <> "L" AND A$ <> "l" THEN 3540
  260. 3590 IF A$ = "H" OR A$ = "h" THEN 4800
  261. 3600 '
  262. 3610 '   ----------- LOW level of SECURITY -------------
  263. 3620 '
  264. 3630 PRINT " LOW Level of Security Selected"
  265. 3640 PRINT " "
  266. 3650 PRINT " You must now enter SEVEN (7) key Alphanumerics as indicated:"
  267. 3660 PRINT " "
  268. 3670 GOSUB 3720
  269. 3680 GOTO 2320
  270. 3690 '
  271. 3700 '
  272. 3710 '   ---------- KEY 1 ---------
  273. 3720 X%=1 : M% = 11 : N% = 47
  274. 3730 IF T$ = "A" THEN GOSUB 4930
  275. 3740 IF T$ = "N" THEN GOSUB 2070
  276. 3750 GOSUB 3210
  277. 3760 GOSUB 3210
  278. 3770 A#=FIX((1# - S!) * MD#)
  279. 3780 '
  280. 3790 '
  281. 3800 '   ---------- KEY 2 ----------
  282. 3810 X%=2
  283. 3820 IF T$ = "A" THEN GOSUB 4930
  284. 3830 IF T$ = "N" THEN GOSUB 2070
  285. 3840 GOSUB 3210
  286. 3850 L=4
  287. 3860 FOR J%=1 TO M%
  288. 3870 GOSUB 3210
  289. 3880 O2% = O%
  290. 3890 FOR K%=1 TO O2%
  291. 3900 GOSUB 3210
  292. 3910 NEXT K%
  293. 3920 GOSUB 3210
  294. 3930 B#(J%)=FIX((1# - S!) * MD#)
  295. 3940 NEXT J%
  296. 3950 '
  297. 3960 '
  298. 3970 '   ---------- KEY 3 -----------
  299. 3980 X%=3
  300. 3990 IF T$ = "A" THEN GOSUB 4930
  301. 4000 IF T$ = "N" THEN GOSUB 2070
  302. 4010 GOSUB 3210
  303. 4020 L=3
  304. 4030 FOR J%=1 TO N%
  305. 4040 GOSUB 3210
  306. 4050 O2% = O%
  307. 4060 FOR K%=1 TO O2%
  308. 4070 GOSUB 3210
  309. 4080 NEXT K%
  310. 4090 GOSUB 3210
  311. 4100 C#(J%)=FIX((1# - S!) * MD#)
  312. 4110 NEXT J%
  313. 4120 '
  314. 4130 '
  315. 4140 '   ---------- KEY 4 -------------
  316. 4150 X%=4
  317. 4160 IF T$ = "A" THEN GOSUB 4930
  318. 4170 IF T$ = "N" THEN GOSUB 2070
  319. 4180 GOSUB 3210
  320. 4190 L=INT(N%/2)
  321. 4200 GOSUB 3210
  322. 4210 K%=O% + 1
  323. 4220 L=N%
  324. 4230 FOR J%=1 TO K%
  325. 4240 GOSUB 3210
  326. 4250 L%=O%
  327. 4260 GOSUB 3210
  328. 4270 C#(L%)=FIX(S! * MD#)
  329. 4280 NEXT J%
  330. 4290 '
  331. 4300 '
  332. 4310 '   ----------- KEY 5 ---------------
  333. 4320 X%=5
  334. 4330 IF T$ = "A" THEN GOSUB 4930
  335. 4340 IF T$ = "N" THEN GOSUB 2070
  336. 4350 GOSUB 3210
  337. 4360 L=INT(M%/2)
  338. 4370 GOSUB 3210
  339. 4380 K%=O% + 1
  340. 4390 L=M%
  341. 4400 FOR J%=1 TO K%
  342. 4410 GOSUB 3210
  343. 4420 L%=O%
  344. 4430 GOSUB 3210
  345. 4440 B#(L%)=FIX(S! * MD#)
  346. 4450 NEXT J%
  347. 4460 '
  348. 4470 '
  349. 4480 '   ------------ KEY 6 ---------------
  350. 4490 X%=6
  351. 4500 IF T$ = "A" THEN GOSUB 4930
  352. 4510 IF T$ = "N" THEN GOSUB 2070
  353. 4520 GOSUB 3210
  354. 4530 L=M%
  355. 4540 FOR J%=1 TO M%
  356. 4550 GOSUB 3210
  357. 4560 D#=B#(O%)
  358. 4570 B#(O%)=B#(J%)
  359. 4580 B#(J%)=D#
  360. 4590 NEXT J%
  361. 4600 '
  362. 4610 '
  363. 4620 '   ------------- KEY 7 --------------
  364. 4630 X%=7
  365. 4640 IF T$ = "A" THEN GOSUB 4930
  366. 4650 IF T$ = "N" THEN GOSUB 2070
  367. 4660 GOSUB 3210
  368. 4670 L=N%
  369. 4680 FOR J%=1 TO N%
  370. 4690 GOSUB 3210
  371. 4700 D#=C#(O%)
  372. 4710 C#(O%)=C#(J%)
  373. 4720 C#(J%)=D#
  374. 4730 NEXT J%
  375. 4740 '
  376. 4750 RETURN
  377. 4760 '
  378. 4770 '   ---------- end of LOW security ------------
  379. 4780 '
  380. 4790 '
  381. 4800 CLS
  382. 4810 PRINT " You must enter 3 long PASSWORDS of alphanumeric data"
  383. 4820 X%=1
  384. 4830 GOSUB 5110
  385. 4840 X%=M%
  386. 4850 GOSUB 5110
  387. 4860 X%=N%
  388. 4870 GOSUB 5110
  389. 4880 '
  390. 4890 GOTO 2320
  391. 4900 '
  392. 4910 '
  393. 4920 '   --------- alphanumeric password to RND ------------
  394. 4930 PRINT "[";X%;"] Enter Password: ";
  395. 4940 LINE INPUT P$
  396. 4950 L%=LEN(P$)
  397. 4960 IF L% < 6 THEN PRINT "  *** password too short; not > 5": GOTO 4930
  398. 4970 IF X%=1 THEN K! = 1
  399. 4980 FOR J%=1 TO L%
  400. 4990 C%=ASC( MID$(P$,J%,1) )
  401. 5000 LL%=L%
  402. 5010 IF LL% > 7 THEN LL%= LL% - (7 * INT(LL%/7)): LL%=LL%+1
  403. 5020 K! = ABS(K! + (CONS!(LL%) * C%) )
  404. 5030 NEXT J%
  405. 5040 Z! = K!
  406. 5050 GOSUB 2250
  407. 5060 S! = Z!
  408. 5070 RETURN
  409. 5080 '
  410. 5090 '
  411. 5100 '   ------- alphanumeric to DECIMAL --------
  412. 5110 X2%=X% * 5
  413. 5120 IF X%=1 THEN PRINT " (A) Enter Password of at least (MIN) ";X2%;" Chars"
  414. 5130 IF X%=M% THEN PRINT " (B) Enter Password of at least (MIN) ";X2%;" Chars"
  415. 5140 IF X%=N% THEN PRINT " (C) Enter Password of at least (MIN) ";X2%;" Chars"
  416. 5150 PRINT "  "
  417. 5160 PRINT "         "; LEFT$(W2$,X2%)
  418. 5170 PRINT "         "; LEFT$(W1$,X2%)
  419. 5180 PRINT "         "; LEFT$(W3$,X2%)
  420. 5190 PRINT "Password:";
  421. 5200 LINE INPUT P$
  422. 5210 PRINT "  "
  423. 5220 L%=LEN(P$)
  424. 5230 IF L% < X2% THEN PRINT "   *** Password TOO SHORT reenter ": GOTO 5110
  425. 5240 T%=INT(L%/X%)
  426. 5250 IF X%=1 THEN K#=1
  427. 5260 FOR K%=1 TO X%
  428. 5270 P2$=LEFT$(P$,T%)
  429. 5280 IF L% < 1 THEN 5400
  430. 5290 P$=MID$(P$,T%+1,L%)
  431. 5300 L%=L%-T%
  432. 5310 FOR J%=1 TO T%
  433. 5320 LL%=J%
  434. 5330 IF LL% > 7 THEN LL%= LL% - (7 * INT(LL%/7)): LL%=LL%+1
  435. 5340 K# =  K# + (CONS!(LL%) * C%)
  436. 5350 NEXT J%
  437. 5360 IF X%=1 THEN A#=K#
  438. 5370 IF X%=M% THEN B#(K%) = K#
  439. 5380 IF X%=N% THEN C#(K%) = K#
  440. 5390 K# = K# - (MD# * INT( K# / MD# ))
  441. 5400 NEXT K%
  442. 5410 RETURN
  443. 5420 '
  444. 5430 '
  445. 5440 '   ------ TRANSPOSITION -------
  446. 5450 '
  447. 5460 FOR JJ%=1 TO L9%
  448. 5470 L=M%
  449. 5480 S#=A#
  450. 5490 GOSUB 3140
  451. 5500 A#=S#
  452. 5510 B%=O%
  453. 5520 L=N%
  454. 5530 S#=B#(B%)
  455. 5540 GOSUB 3140
  456. 5550 B#(B%)=S#
  457. 5560 B%=O%
  458. 5570 S#=C#(B%)
  459. 5580 L=L%
  460. 5590 GOSUB 3140
  461. 5600 C#(B%)=S#
  462. 5610 SWAP IX%(JJ%),IX%(O%)
  463. 5620 NEXT JJ%
  464. 5630 RETURN
  465. 5640 '
  466. 5650 '
  467. 5660 '
  468. 5670 FOR JJ%=1 TO L9%
  469. 5680 G1%=IX%(JJ%)
  470. 5690 G2%=IX%(JJ%+L9%)
  471. 5700 G1$=MID$(M$,G1%,1)
  472. 5710 G2$=MID$(M$,G2%,1)
  473. 5720 SWAP G1$,G2$
  474. 5730 MID$(M$,G1%,1)=G1$
  475. 5740 MID$(M$,G2%,1)=G2$
  476. 5750 NEXT JJ%
  477. 5760 RETURN
  478. 5770 '
  479. 5780 '
  480. 5790 '
  481. 5800 END
  482.  SWAP G1$,G2$
  483. 5730 MID$(M$,G1%,1)=G1$
  484. 5740 MID$(M$,G2%,1)=G2$
  485. 5750 NEXT JJ%
  486. 5760 R